#include<stdlib.h>
#include<stdio.h>
#include "personnel.h"


void saisir_personnel(Personnel *p, char* fichier_personnel, int identifiant, int e, int existe)
{
	printf("donner le nom du personnel: \n");
	scanf("%s",p->nom);
	printf("donner son prenom : \n");
	scanf("%s",p->prenom);
        
      do
      { printf("donner son age: \n");
	scanf("%d",&(p->age));
      } while ((p->age<20)|| (p->age>120));        

      do
      { printf("donner le numéro de CIN: \n");
        scanf("%d",&(p->CIN));
      } while ( (p->CIN <10000000) || (p->CIN> 99999999));
        
        printf ("donner la date d'embauche \n");

      do
       { printf("le jour:   ");
         scanf("%d", &(p->date_embauche.jour));
       } while (( p->date_embauche.jour <0) || (p->date_embauche.jour >31));

       
      do
       { printf("le mois:   ");
         scanf("%d", &(p->date_embauche.mois));
       } while (( p->date_embauche.mois <0) || (p->date_embauche.mois >12));
       
        printf("l'année:   ");
         scanf("%d", &(p->date_embauche.annee));

        printf("donner son role: \n");
	scanf("%s",p->role);


      do 
      { printf("donner son ID: \n");
	scanf("%d",&(p->ID));
        identifiant=p->ID;
        e=identifiant_unique(fichier_personnel,identifiant, existe);

      } while (e==1);
}



/******************************************************************/

void enregistrer_personnel(char fichier_personnel[], Personnel *p, int identifiant, int e, int existe)
{
  FILE * f;
  f=fopen(fichier_personnel,"ab");
  if(f!=NULL)
  { 
     saisir_personnel(p,fichier_personnel,identifiant,e, existe);
     fwrite(p,sizeof(Personnel),1,f);
  }
fclose(f);
}




/**********************************************************************/
int identifiant_unique(char fichier_personnel[], int identifiant, int existe)
{ FILE *f;
   Personnel p;

   f=fopen(fichier_personnel,"rb");
   if (f!= NULL)
      {
         while (fread(&p,sizeof(Personnel),1,f)!= 0)
             {
            if( identifiant==p.ID)
                { existe=1;
                } 

            }

         }

fclose(f);
return(existe);
}




/*******************************************************************/

void liste_personnel(char fichier_personnel[])
{
  FILE *f;
  Personnel p;
  f=fopen(fichier_personnel,"rb");
  if (f!= NULL)
     {
        printf("\n -- Liste des personnels  -- \n"); 
        printf("-----------------------\n");
        while (fread(&p,sizeof(Personnel),1,f)!= 0)
       {
        printf("%s %s - %d - %d  - %d/%d/%d - %s - %d\n", p.nom, p.prenom, p.age,p.CIN, p.date_embauche.jour, p.date_embauche.mois, p.date_embauche.annee, p.role, p.ID);
       }
     }
      printf("-----------------------\n");
fclose(f);
}
/************************************************************************/


int rechercher_personnel_ID (char fichier_personnel[], int identifiant)
{  
   FILE *f;
   Personnel p;

   f=fopen(fichier_personnel,"rb");
   if (f!= NULL)
      {
         while (fread(&p,sizeof(Personnel),1,f)!= 0)
             {
            if( identifiant==p.ID)
               { printf("-----------------------\n");
                 printf("Cet ID %d correspond à: \n nom: %s \n prenom: %s \n age: %d \n CIN: %d \n date d'embauche: %d/%d/%d\n role: %s\n", p.ID, p.nom, p.prenom, p.age, p.CIN, p.date_embauche.jour, p.date_embauche.mois, p.date_embauche.annee, p.role);
                 printf("-----------------------\n");
                 
                 
                 return (1);
               }
             
     
             }
       printf("-----------------------\n");
       printf("\ncet ID ne correspond à aucun personnel dans la liste. \n");
       printf("-----------------------\n");
       
       return (0);
      
   }
fclose(f);

}

/**********************************************************************/
int rechercher_personnel_CIN (char fichier_personnel[], int CIN)
{  
   FILE *f;
   Personnel p;

   f=fopen(fichier_personnel,"rb");
   if (f!= NULL)
      {
         while (fread(&p,sizeof(Personnel),1,f)!= 0)
             {
            if( CIN==p.CIN)
               { printf("-----------------------\n");
                 printf("ce numéro de CIN %d correspond à: \n nom: %s \n prenom: %s \n age: %d  \n role: %s \n date d'embauche: %d/%d/%d\n ID: %d\n", p.CIN, p.nom, p.prenom, p.age, p.role, p.date_embauche.jour, p.date_embauche.mois, p.date_embauche.annee, p.ID );
                 printf("-----------------------\n");
                 
                 
                 return (1);
               }
             
     
             }
       printf("-----------------------\n");
       printf("\nce numéro de CIN ne correspond à aucun personnel dans la liste. \n");
       printf("-----------------------\n");
       
       return (0);
      
   }
fclose(f);

}


/****************************************************************/
int rechercher_personnel_date (char fichier_personnel[], int jour, int mois, int annee)
{  
   FILE *f;
   Personnel p ;

   f=fopen(fichier_personnel,"rb");
   if (f!= NULL)
      {
         while (fread(&p,sizeof(Personnel),1,f)!= 0)
             {  if( (jour==p.date_embauche.jour) && (mois==p.date_embauche.mois) && (annee==p.date_embauche.annee))
                
                { printf("-----------------------\n");
                 printf("nom: %s  prenom: %s  age: %d  role: %s  CIN : %d  ID: %d\n", p.nom, p.prenom, p.age, p.role,  p.CIN, p.ID );
                 printf("-----------------------\n");
               }
             
     
             }
       
   }
fclose(f);
return (0);
}


/****************************************************************/


void supprimer_personnel_ID (char fichier_personnel[], int E, int identifiant)
{
    char tmp[]="tmp.txt";
    FILE *f ;
    FILE *t ;
    Personnel p;
    int existe;

  E= rechercher_personnel_ID (fichier_personnel, identifiant);

   

   if (E ==0)
    {printf("\n-\n");
    }  


  else if (E ==1)
  {

    f=fopen(fichier_personnel,"rb") ;
    t=fopen(tmp,"wb") ;

    if (f!= NULL && t!=NULL)
     {
      while(fread(&p,sizeof(Personnel),1,f)!=0)
       {
          if( p.ID!=identifiant)
            { fwrite(&p,sizeof(Personnel),1,t) ;
            }
        }
       }
      
   
     fclose(f) ;
     fclose(t) ;

     f=fopen(fichier_personnel,"wb") ;
     t=fopen(tmp,"rb") ;

     while(fread (&p,sizeof(Personnel),1,t)!=0)
     {fwrite(&p,sizeof(Personnel),1,f) ;}

     fclose(f) ;
     fclose(t) ;

  
   printf("le personnel ayant ID: %d est retiré de la liste\n",identifiant );
   printf("-----------------------\n");
   

  }
}

/*********************************************************************/
void supprimer_personnel_CIN (char fichier_personnel[], int E, int CIN)
{ 
    char tmp[]="tmp.txt";
    FILE *f ;
    FILE *t ;
    Personnel p;
    int existe;

  E= rechercher_personnel_CIN ( fichier_personnel, CIN);

   

   if (E ==0)
    {printf("\n-\n");
    }  


  else if (E ==1)
  {

    f=fopen(fichier_personnel,"rb") ;
    t=fopen(tmp,"wb") ;

    if (f!= NULL && t!=NULL)
     {
      while(fread(&p,sizeof(Personnel),1,f)!=0)
       {
          if( p.CIN!=CIN)
            { fwrite(&p,sizeof(Personnel),1,t) ;
            }
        }
       }
      
   
     fclose(f) ;
     fclose(t) ;

     f=fopen(fichier_personnel,"wb") ;
     t=fopen(tmp,"rb") ;

     while(fread (&p,sizeof(Personnel),1,t)!=0)
     {fwrite(&p,sizeof(Personnel),1,f) ;}

     fclose(f) ;
     fclose(t) ;

  
   printf("le personnel ayant la CIN numéro %d est retiré de la liste\n",CIN);
   printf("-----------------------\n");
   

  }
}





/*******************************************************************/
void init_liste_personnel(char fichier_personnel[])
{
FILE*f;
f=fopen(fichier_personnel,"wb");
if(f!=NULL)
{
  printf("la liste est initialisée\n");
}           
fclose(f);
}
